{Datos comunes

  Copyright (C) 2010 Jorge Turiel <contact>

  This source is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free
  Software Foundation; either version 2 of the License, or (at your option)
  any later version.

  This code is distributed in the hope that it will be useful, but WITHOUT ANY
  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
  details.

  A copy of the GNU General Public License is available on the World Wide Web
  at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
  to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  MA 02111-1307, USA.
}
unit ucomun;

{$mode objfpc}{$H+}

interface
uses
  Classes, SysUtils, Contnrs,ComCtrls,Dialogs,uSolucion,
  XMLWrite,XMLRead,DOM,Controls; //Aquí está definido alClient

Type TPosVentana = Record
     Arriba  :Integer;
     Izquierda : Integer;
     Alto : Integer;
     Ancho : Integer;
end;

Const
    SinNombre :string = 'Solucion sin nombre';
    BoardsArduino : string = 'Boards.txt';
    Boards : string = 'Boards.xml';
    Main : string = 'Main';
    Ext : string = '.pde';

Var
     NombreSolucion : String;
     ListaProyectos : TObjectList; //Crear la lista de objetos
     nTabSheet : LongInt; //Contiene el número de TabSheet Creadas
     ProyectoActual : String; //Contiene el proyecto que se debe compilar
     LimiteSuperior : Integer; //Contiene la posicion en altura, dónde se situaran los otros formularios
     {Variables posicion de la ventana editor}
     EditorPos : TPosVentana;
     {Variable posicion de la ventana Explorador}
     ExploradorPos : TPosVentana;
     {Variable posición de la ventana de mensajes}
     MensajesPos : TPosVentana;
     {Directorio de archivo de datos}
     Datos : String;
     {Ruta dónde está la instalación de Arduino, en el este directorio se
      important y leen datos}
      Arduino : String;
      //Ancho columna del ListView de Crear Proyecto
      AnchoCol : Integer;

      //La solución
      Solucion : TSolucion;
      //Contiene el directorio para los datos del usuario, en windows7
      //c:\users\user\programa
      dirUsuario : String;



Procedure ActualizaExplorador;
Procedure GuardarSolucion (stRuta : string);

implementation
uses uControlesComun,uExploraSolucion,umain;

procedure ActualizaExplorador;
var
  Nombre: String;
  I: Integer;
  NodoRaiz,
  NodoHijo: TTreeNode;
  Registro: TProyecto;
  J: Integer;
  Ficheros: TFichero;
  NodoFichero: TTreeNode;
begin
  If Solucion = nil Then
  Begin
    Nombre := SinNombre;
  end
  Else
  Begin
    Nombre := Solucion.nombre;
  end;
  With frMain.frExplorador do
  Begin
   TreeView1.Items.Clear;
    NodoRaiz := TreeView1.Items.AddChild(Nil,Nombre);
    NodoRaiz.ImageIndex:=2;
    NodoRaiz.SelectedIndex:=2;


  For I := 0 To Solucion.Contar-1 do
  Begin
      Registro := TProyecto.Create('','',-1);
      Registro := Solucion.Proyectos[i];
      NodoHijo := TreeView1.Items.AddChild(NodoRaiz,Registro.Nombre);
      NodoHijo.ImageIndex:=1;
      NodoHijo.SelectedIndex:=1;
      For J := 0 To Registro.Contar-1 do
      Begin
          Ficheros := Registro.Ficheros[j];
          NodoFichero :=TreeView1.Items.AddChild(NodoHijo,Ficheros.Nombre);
          NodoFichero.ImageIndex:=0;
          NodoFichero.SelectedIndex:=0;
      end;
      Registro := nil;
  end;
  end;
  If Registro  <> nil Then
     Registro := nil;
end;

procedure GuardarSolucion(stRuta: string);
var
  xDoc: TXMLDocument;
  Proyecto: TProyecto;
  RootNode: TDOMElement;
  I: Integer;
  ParentNode: TDOMElement;
  NodoHijo: TDOMText;
begin
   xDoc := TXMLDocument.create;
   RootNode := xDoc.CreateElement('Solucion');
   xDoc.AppendChild(RootNode);
   Proyecto := TProyecto.Create('','',-1);
   For I:= 0 To Solucion.Contar-1 do
   Begin
       Proyecto := Solucion.Proyectos[i];
       RootNode := xDoc.DocumentElement;
       ParentNode := xDoc.CreateElement('Proyecto');
       TDOMElement(ParentNode).SetAttribute('Nombre',Proyecto.Nombre);

       RootNode.AppendChild(ParentNode);
       ParentNode := xDoc.CreateElement('Ruta');
       NodoHijo := xDoc.CreateTextNode(Proyecto.Ruta);
       ParentNode.AppendChild(NodoHijo);
       RootNode.ChildNodes.Item[I].AppendChild(ParentNode);
       //Guarda el proyecto
       Proyecto.Guardar(Proyecto.Ruta+Proyecto.Nombre);
       Proyecto := nil;
   end;
   IF Proyecto <> nil Then
   Begin
     Proyecto := nil;
   end;
   IF Not DirectoryExists  (ExtractFilePath(stRuta)) Then
   Begin
    CreateDir (ExtractFilePath(stRuta));
   end;
   WriteXMLFile (xdoc,stRuta);
   xdoc.free;

end;




end.

